// SimpleGLUTApplication.h

#ifndef SIMPLEGLUTAPPLICATION_H_
#define SIMPLEGLUTAPPLICATION_H_

#include <GL/glew.h>
#include <GL/glut.h>
#define GL3_PROTOTYPES

// Include the vector and matrix utilities from the textbook, as well as some
// macro definitions.
#include "Angel.h"

#include <vector>

#include "DebugHelper.h"
#include "AbstractApplication.h"
#include "AbstractGLUTWindow.h"
#include "Singleton.h"
#include "ManipulatorWindow.h"

using namespace std;


namespace Voltron
{
//	class ManipulatorWindow;
	
	//class AbstractGLUTWindow{};
	
	class SimpleGLUTApplication : public AbstractApplication
	{
	
		private:
		
		// Private Constructors
		// Private Destructor
		// Private properties
		// Private members

		protected:
		
		// Protected Constructors
		// Protected Destructor
		// Protected properties
		// Protected members
				
		public:


		// Public Constructors
		SimpleGLUTApplication();
		
		// Public Destructor
		~SimpleGLUTApplication();
	
		// Public properties
		vector< AbstractGLUTWindow* > _windows;
		// vector< ManipulatorWindow* > _windows;
		
		string _objectFilesPath;
		
	
		// Public members
		int Initialize();
		int Initialize(int argc, char *argv[]);
		int Run();

		int attachGLUTWindow(AbstractGLUTWindow* window);
		int dettachGLUTWindow(AbstractGLUTWindow* window);
//		int attachGLUTWindow(ManipulatorWindow* window);
//		int dettachGLUTWindow(ManipulatorWindow* window);

	};

// This singleton is so that we can access this application instance anywhere
typedef Singleton<SimpleGLUTApplication> App;

}

#endif
